package com.bb.flow.parser.impl.parsejson.parsenode;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.bb.flow.api.exception.ParseException;
import com.bb.flow.config.ClassInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author bigbeard
 * 解析类类型的节点
 */
public class ParseClassInfo {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 解析类相关
     *
     * @param jsonObject       待解析json对象
     * @param nodeName         节点名称,用于日志输出
     * @param flowTemplateName 流程模版名称,用于日志输出
     * @return 类对象
     */
    public ClassInfo parseClassInfo(JSONObject jsonObject, String nodeName, String flowTemplateName) throws ParseException {
        ClassInfo classInfo = new ClassInfo();
        String className = jsonObject.getString("ClassName");
        classInfo.setClassName(className);
        if ("".equals(classInfo.getClassName()) || null == className) {
            String s = String.format("流程模版[%s]中的节点[%s]中的类名称未配置,后续节点不再解析", flowTemplateName, nodeName);
            throw new ParseException(s);
        }
        JSONArray jsonArray = jsonObject.getJSONArray("Properties");
        if (jsonArray == null || jsonArray.isEmpty()) {
            logger.debug("流程模版[{}]中的节点[{}]中未给类[{}]配置初始化属性值",
                    flowTemplateName, nodeName, className);
            return classInfo;
        }
        for (int j = 0; j < jsonArray.size(); j++) {
            String key = jsonArray.getJSONObject(j).getString("Key");
            String value = jsonArray.getJSONObject(j).getString("Value");
            if (null != key && null != value) {
                classInfo.addProperty(key, value);
            }
        }
        return classInfo;
    }
}
